package com.quectel.sdk.hikisc.constant;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 在这里编写说明
 * <p>
 * Events属性说明：
 * 参数名称	数据类型	属性描述	是否必填	最大长度	备注
 * data	Data	事件详情	是	不限	详见Data属性说明
 * eventId	String	事件唯一标识	是	64
 * srcIndex	String	事件源编号，物理设备是资源编号	是	64
 * srcType	String	事件源类型	是	64
 * srcName	String	事件源名称	否	64
 * eventType	Number	事件类型	是	64
 * status	Number	事件状态	是	32	0-瞬时
 * 1-开始
 * 2-停止
 * 3-事件脉冲
 * 4-事件联动结果更新
 * timeout	Number	脉冲超时时间	是	32	单位：秒
 * happenTime	String	事件发生时间（设备时间）	是	32
 * srcParentIndex	String	事件发生的事件源父设备编号	否	64
 * Data属性说明
 * 参数名称	数据类型	属性描述	是否必填	最大长度	备注
 * captureLibResult	CaptureLibResult	抓拍结果	是	不限
 * + faces	Faces	人脸信息	是	不限
 * ++ URL	String	抓拍到的人脸图片的URL，可能位于设备或ASW服务上。	是	256	调用人脸服务图片下载 获取图片数据
 * ++ age	Age	年龄信息	否	不限
 * +++ ageGroup	String	年龄段，见附录附录A.34 设备年龄段类型	否	32
 * ++ faceRect	FaceRect	人脸坐标	否	不限
 * +++ height	Number	宽度	否	不限
 * +++ width	Number	高度	否	不限
 * +++ x	Number	X坐标	否	不限
 * +++ y	Number	Y坐标	否	不限
 * ++faceScore	Object	人脸评分参数	否
 * +++enable	Boolean	是否开启功能	是
 * +++type	Number	过滤类型	是		0-全部类型
 * 1-人脸抓拍图片过滤
 * 2-黑名单库
 * 3-白名单库
 * +++totalScore	Number	人脸评分	否		人脸总评分：
 * 综合所有评分项得到人脸总评分
 * 数值越大
 * 人脸质量越高
 * float类型
 * [0,1]
 * ++ gender	Gender		否	不限
 * +++ value	String	性别，见数据字典设备性别类型	否	32
 * ++ glass	Glass		否	不限
 * +++ value	String	是否戴眼镜，见数据字典设备戴眼镜类别	否	32
 * + targetAttrs	TargetAttrs	目标属性	是	不限
 * ++ bkgUrl	String	抓拍图片的完整原图	是	256	调用人脸服务图片下载 获取图片数据
 * ++ cameraIndexCode	String	抓拍这张图片的监控点的唯一标识	是	64
 * ++ deviceIndexCode	String	抓拍这张图片的监控点所属的设备的唯一标识	是	64
 * ++ faceTime	String	抓拍这张图片时的时间	是	64
 * ++ picServerIndexCode	String	图片服务唯一标志	否	32
 * ++rect	FaceRect	人脸坐标	否	不限
 * +++ height	Number	宽度	否	不限
 * +++ width	Number	高度	否	不限
 * +++ x	Number	X坐标	否	不限
 * +++ y	Number	Y坐标	否	不限
 * channelID	String	抓拍这张图片的监控点的通道号	是	32
 * dataType	String	事件类别，人脸比对的事件类别为faceMatch	是	128
 * ipAddress	String	事件来源的地址，人脸抓拍的事件来源为抓拍机的地址。	是	32
 * portNo	String	事件来源的端口	否	32
 *
 * @author: rananxin
 * @email: ryan.ran@quectel.com
 * @date: 2022-10-19 11:01:00
 */
public class HikIscConstants {

    /**
     * 资源类型
     */
    @AllArgsConstructor
    public static enum ResourceTypeEnum {
        // 门禁点
        DOOR("door"),
        // 监控点
        CAMERA("camera"),
        // 可视对讲设备
        VIS_DEVICE("visDevice"),
        // 停车场-道闸
        BARRIER_GATE("barrierGate");

        @Getter
        private final String type;
    }

    /**
     * 订阅事件类型
     */
    @AllArgsConstructor
    public static enum EventEnum {

        /**
         *
         */
        HIGH_TOSS_ACT("高空告警", 930335, "highTossAct"),

        /**
         *
         */
        FACE_AUTH_PASSD("人脸认证通过", 196893, "facePassd"),

        /**
         *
         */
        REGIONAL_INVASION("区域入侵", 131588, "regionalInvasion"),

        /**
         *
         */
        LICENSE_PLATE_CAPTURE("车牌抓拍", 1157632001, "licensePlateCapture"),

        /**
         *
         */
        FACE_CAPTURE("人脸抓拍", 131614, "faceCapture"),

        /**
         *
         */
        VIS_FACE_OPEN_LOCK("可视对讲人脸开锁", 983309, "visFaceOpenLock"),

        /**
         *
         */
        PARKING_LOT_ADMISSION2("停车场入场压线", 771760130, "villageingLotAdmission2"),

        /**
         *
         */
        PARKING_LOT_APPEARANCE2("停车场出场压线", 771760133, "villageingLotAppearance2");

        @Getter
        private String eventName;
        @Getter
        private Integer eventCode;
        @Getter
        private String callBackPath;

        public static EventEnum getEnumByPath(String callBackPath) {
            for (EventEnum value : EventEnum.values()) {
                if (value.callBackPath.equals(callBackPath)) {
                    return value;
                }
            }
            return null;
        }

        public static Object getNameByPath(String callBackPath) {
            for (EventEnum value : EventEnum.values()) {
                if (value.callBackPath.equals(callBackPath)) {
                    return value.eventName;
                }
            }
            return null;
        }
    }
}
